package com.yzkj.siot.base;

import com.yzkj.siot.result.PageParams;
import com.yzkj.siot.result.PageResponse;

import java.util.List;

public interface IFacade<E, T> {

    /**
     * 根据条件获取列表数据
     * 若 current 或 limit 为0 会返回所有数据
     *
     * @param pageParams current: 当前页; limit: 每页数据大小
     * @return PageResponse<E>
     */
    PageResponse<T> page(PageParams<E> pageParams);

    /**
     * 获取一条数据详情
     *
     * @param id 主键
     * @return E
     */
    T queryOne(int id);

    /**
     * 创建或更新一条数据
     * 其中id为0时认为是创建，id不为0时认为是更新
     *
     * @param entity 对象
     * @return E
     */
    T saveOrUpdate(E entity);

    /**
     * 根据id删除一条数据
     *
     * @param id id
     * @return E 被删除的对象
     */
    T remove(int id);

    /**
     * 批量删除数据
     *
     * @param idList 期望删除的数据的主键列表
     * @return Boolean true: 成功; false: 失败
     */
    Boolean batchRemove(List<Integer> idList);

    /**
     * 批量插入数据
     *
     * @param entities 期望插入的数据列表
     * @return Boolean true: 成功; false: 失败
     */
    Boolean batchSave(List<E> entities);
}
